package com.hospital.service.impl;

import com.github.pagehelper.PageInfo;
import com.hospital.dao.RegisterDao;
import com.hospital.entity.Register;
import com.hospital.service.RegisterService;
import com.hospital.vo.ResponseVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;


/**
 * 挂号接口实现类
 * @author coder_zzm
 * @date 2022/5/17 22:47
 */
@Slf4j
@Service
public class RegisterServiceImpl implements RegisterService {

    @Resource
    private RegisterDao registerDao;

    /**
     * 获取所有挂号信息
     * @param pageNum 页码
     * @param pageSize 每页显示数量
     * @return 挂号信息列表
     */
    @Override
    public ResponseVO getAllAndPage(Integer pageNum, Integer pageSize) {
        log.info("业务层获取所有挂号信息");
        List<Register> registers = registerDao.getAllAndPage(pageNum, pageSize);

        // 通过 pageHelper 工具类实现自定义分页
        PageInfo<Register> pageInfo = new PageInfo<>(registers);
        return ResponseVO.buildSuccessInstance(pageInfo);
    }

    /**
     * 查询挂号详细信息
     * @param rId 挂号编号
     * @return 挂号详细想信息
     */
    @Override
    public ResponseVO getRegisterDetail(String rId) {
        log.info("业务层获取挂号详细信息");
        Register register = registerDao.getRegisterDetail(rId);
        if (register != null) {
            return ResponseVO.buildSuccessInstance(register);
        }
        return ResponseVO.buildSuccessInstance(ResponseVO.NULL_RESULT);
    }

    /**
     * 添加挂号信息
     * @param register 挂号实体类
     * @return 挂号是否添加成功
     */
    @Override
    public ResponseVO addRegister(Register register) {
        log.info("业务层添加挂号信息");
        Integer result = registerDao.addRegister(register);
        if (result > 0) {
            return ResponseVO.buildSuccessInstance(ResponseVO.RESP_SUCCESS);
        }
        return ResponseVO.buildSuccessInstance(ResponseVO.UPDATE_FAIL);
    }

    /**
     * 根据挂号编号删除挂号信息
     * @param rId 挂号编号
     * @return 受影响行数
     */
    @Override
    public ResponseVO delRegisterGetById(Integer rId) {
        log.info("业务层删除挂号信息");
        Integer row = registerDao.delRegisterGetById(rId);
        if (row > 0) {
            return ResponseVO.buildSuccessInstance(ResponseVO.RESP_SUCCESS, row);
        }
        return ResponseVO.buildSuccessInstance(ResponseVO.UPDATE_FAIL, 0);
    }

    /**
     * 根据挂号编号修改挂号信息
     * @param register 挂号的实体
     * @return 挂号信息是否修改成功
     */
    @Override
    public ResponseVO updateRegister(Register register) {
        log.info("业务层修改挂号信息");
        Integer result = registerDao.updateRegister(register);
        if (result > 0) {
            return ResponseVO.buildSuccessInstance(ResponseVO.RESP_SUCCESS);
        }
        return ResponseVO.buildSuccessInstance(ResponseVO.UPDATE_FAIL);
    }

    /**
     * 根据挂号人姓名查询信息方法
     * @param rName 挂号人姓名
     * @return 多条记录
     */
    @Override
    public List<Register> getRegisterName(String rName) {
        return registerDao.getRegisterName(rName);
    }

}
